Drop, add or set the direction of a directed or undirected arc (also known as edge).
# arc operations.
set.arc(x, from, to, check.cycles = TRUE, check.illegal = TRUE, debug = FALSE)
drop.arc(x, from, to, debug = FALSE)
reverse.arc(x, from, to, check.cycles = TRUE, check.illegal = TRUE, debug = FALSE)# edge (i.e. undirected arc) operations
set.edge(x, from, to, check.cycles = TRUE, check.illegal = TRUE, debug = FALSE)
drop.edge(x, from, to, debug = FALSE)
All functions return invisibly an updated copy of x
.
an object of class bn
.
a character string, the label of a node.
a character string, the label of another node.
a boolean value. If TRUE
the graph is tested for
acyclicity; otherwise the graph is returned anyway.
a boolean value. If TRUE
arcs that break the
parametric assumptions of x
, such as those from continuous to
discrete nodes in conditional Gaussian networks, cause an error.
a boolean value. If TRUE
a lot of debugging output is
printed; otherwise the function is completely silent.
Marco Scutari
The set.arc()
function operates in the following way:
if there is no arc between from
and to
, the arc
from
\(\rightarrow\) to
is added.
if there is an undirected arc between from
and to
, its
direction is set to from
\(\rightarrow\) to
.
if the arc to
\(\rightarrow\) from
is present,
it is reversed.
if the arc from
\(\rightarrow\) to
is present, no
action is taken.
The drop.arc()
function operates in the following way:
if there is no arc between from
and to
, no action is
taken.
if there is a directed or an undirected arc between from
and
to
, it is dropped regardless of its direction.
The reverse.arc()
function operates in the following way:
if there is no arc between from
and to
, it returns an
error.
if there is an undirected arc between from
and to
, it
returns an error.
if the arc to
\(\rightarrow\) from
is present, it
is reversed.
if the arc from
\(\rightarrow\) to
is present, it
is reversed.
The set.edge()
function operates in the following way:
if there is no arc between from
and to
, the undirected
arc from
- to
is added.
if there is an undirected arc between from
and to
, no
action is taken.
if either the arc from
\(\rightarrow\) to
or the
arc to
\(\rightarrow\) from
are present, they are
replaced with the undirected arc from
- to
.
The drop.edge()
function operates in the following way:
if there is no undirected arc between from
and to
, no
action is taken.
if there is an undirected arc between from
and to
, it
is removed.
if there is a directed arc between from
and to
, no
action is taken.
dag = cpdag(model2network("[A][C][F][B|A][D|A:C][E|B:F]"))
dag
## use debug = TRUE to get more information.
updated = set.arc(dag, "A", "B")
updated
updated = drop.arc(dag, "A", "B")
updated
updated = drop.edge(dag, "A", "B")
updated
updated = reverse.arc(dag, "A", "D")
updated
Run the code above in your browser using DataLab